package projet_coo;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;

public class Plateau extends JFrame implements ActionListener{
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	Case [][] plateau_jeu;
	String race1;
	String race2;
	private final JPanel damier;
	private JPanel information;
    private final JLabel etiquette;
    private boolean tour;
    private int largeur =8;
    private int hauteur =12;
    private int nbCasePiege = 15;
    private int nbMur = 10;
    private boolean deploiement = true;
	private JLabel pv;
	private JLabel mouvement;
	private JLabel force;
	private JLabel precision;
	private JLabel soin;
	private JLabel portee;
	private JLabel resistance;
	
	
	
	public Plateau(String race1, String race2){
		this.race1 = race1;
		this.race2 = race2;
		
		
		setPreferredSize(new Dimension(480,800)); 
		setBackground(Color.darkGray);
		setSize(getPreferredSize());
		
		setLayout(new FlowLayout());

		setDefaultCloseOperation(EXIT_ON_CLOSE);

		JMenuBar menubar=new JMenuBar();
		JMenu menu=new JMenu("Menu");	
		JMenuItem it1=new JMenuItem("Start");
		
		// Lorsque l'on clique sur l'item Start, 
		// on d�clenche une action appel�e "Start"
		it1.setActionCommand("Start");
		
		JMenuItem it2=new JMenuItem("Quitter");
		it2.setActionCommand("Quitter");
		
		// ajout des items au menu
		menu.add(it1);
		menu.add(it2);	    	
		// ajout du menu � la barre de menu
		menubar.add(menu);	
		// Les �v�nements sur les items seront �cout�s par l'�chiquier
		it1.addActionListener(this);	
		it2.addActionListener(this);
		// on affecte la barre de menu � la fen�tre Echiquier
		setJMenuBar(menubar);
		
		
		damier=new JPanel(new GridLayout(hauteur,largeur,0,0));
		damier.setSize(500,500);
		etiquette=new JLabel("Aucune partie en cours");
		pv = new JLabel("aucune unité selectionné");
		information  = new JPanel(new GridLayout(2,0,0,0));
		// on cr�e un tableau de cases 8X8
		plateau_jeu=new Case[hauteur][largeur];
		
		
		for(int i=0;i<hauteur;i++){
		    for(int j=0;j<largeur;j++){
				plateau_jeu[i][j]=new Case(this,Color.WHITE,i,j,null,deploiement,0);
				// ajout de la case cr��e sur le damier
				damier.add(plateau_jeu[i][j]);
		    }	
			// on ins�re le damier dans la fen�tre
			add(damier);
			// on ins�re le label dans la fen�tre
			
		
	    }
	
		init_race_bas();
		init_race_haut();
		//on veut afficher les informations sur chaque personnage lorsque l'on click dessus
		
		information  = new JPanel(new GridLayout(8,0,0,0));
		pv = new JLabel("aucune unité selectionné");
		mouvement = new JLabel("aucune unité selectionné");
		force = new JLabel("aucune unité selectionné");
		precision = new JLabel("aucune unité selectionné");
		soin = new JLabel("aucune unité selectionné");
		portee = new JLabel("aucune unité selectionné");
		resistance = new JLabel("aucune unité selectionné");
		
		information.add(etiquette);
		information.add(pv);
		information.add(mouvement);
		information.add(force);
		information.add(precision);
		information.add(portee);
		information.add(resistance);
		information.add(soin);
		
		add(information);
		
		
		int higher1 = hauteur;
		int higher2 = largeur;
		int alea1=0;
		int alea2=0;
		while(getNbCasePiege()> 0){
			alea1 = (int)(Math.random() * (higher1));
			alea2 = (int)(Math.random() * (higher2));
			if(!plateau_jeu[alea1][alea2].isOccupee()){
				plateau_jeu[alea1][alea2].setnbDegat(1);
				this.setNbCasePiege(this.getNbCasePiege()-1);
			}
		}
		while(getNbMur()> 0){
			alea1 = (int)(Math.random() * (higher1));
			alea2 = (int)(Math.random() * (higher2));
			if(!plateau_jeu[alea1][alea2].isOccupee()){
				plateau_jeu[alea1][alea2].setMur();
				this.setNbMur(this.getNbMur()-1);
			}
		}

	}
	
	public void actionPerformed(ActionEvent e){	
		// Si on clique sur Quitter alors on tue l'application
		if(e.getActionCommand().equals("Quitter"))
		    System.exit(0);
		else // Sinon, on a cliqu� sur "Start" et on cr�e une nouvelle partie
		    NouvellePartie();
    }


	void init_race_haut(){
		switch(race1){
		case "elfe":
			etiquette.setText("deploiement des elfe");
			plateau_jeu[0][7].P = new Piece(this, plateau_jeu[0][7],true, new Archer(),  new elfe(),"Ar");
			plateau_jeu[0][6].P = new Piece(this, plateau_jeu[0][6],true, new Archer(),  new elfe(),"Ar");
			plateau_jeu[0][5].P = new Piece(this, plateau_jeu[0][5],true, new Archer(),  new elfe(),"Ar");
			plateau_jeu[0][4].P = new Piece(this, plateau_jeu[0][4],true, new Archer(),  new elfe(),"Ar");
			plateau_jeu[0][3].P = new Piece(this, plateau_jeu[0][3],true, new Archer(),  new elfe(),"Ar");
			plateau_jeu[0][2].P = new Piece(this, plateau_jeu[0][2],true, new Archer(),  new elfe(),"Ar");
			plateau_jeu[0][1].P = new Piece(this, plateau_jeu[0][1],true, new Archer(),  new elfe(),"Ar");
			plateau_jeu[0][0].P = new Piece(this, plateau_jeu[0][0],true, new Archer(),  new elfe(),"Ar");
			
					break;
		case "humain":
			etiquette.setText("deploiement des humains");
			break;
		default:
			System.out.println("Race non disponible");
			System.exit(0);
		}
		
	}
	
	void init_race_bas(){
		switch(race2){
		case "elfe":
			etiquette.setText("deploiement des elfe");
			
			break;
		case "humain":
			plateau_jeu[11][7].P = new Piece(this, plateau_jeu[11][7],false, new Archer(),  new elfe(),"Ar");
			plateau_jeu[11][6].P = new Piece(this, plateau_jeu[11][6],false, new Archer(),  new elfe(),"Ar");
			plateau_jeu[11][5].P = new Piece(this, plateau_jeu[11][5],false, new Soigneur(),  new elfe(),"Ar");
			plateau_jeu[11][4].P = new Piece(this, plateau_jeu[11][4],false, new Guerrier(),  new elfe(),"Ar");
			plateau_jeu[11][3].P = new Piece(this, plateau_jeu[11][3],false, new Guerrier(),  new elfe(),"Ar");
			plateau_jeu[11][2].P = new Piece(this, plateau_jeu[11][2],false, new Soigneur(),  new elfe(),"Ar");
			plateau_jeu[11][1].P = new Piece(this, plateau_jeu[11][1],false, new Archer(),  new elfe(),"Ar");
			plateau_jeu[11][0].P = new Piece(this, plateau_jeu[11][0],false, new Archer(),  new elfe(),"Ar");
			break;
		default:
			etiquette.setText("Race non disponible");
			System.exit(0);
		}
	}

	private void NouvellePartie(){

	}
	
	public boolean estFinit(){
		return true;
	}
	
	public boolean getTour(){
		return tour;
	    }
	    
	public void changeTour(){ 
		// change le bool�en tour et met � jour l'�tiquette
		tour=!tour;
		if(tour)
		    etiquette.setText("Au tour des bleus");
		else
		    etiquette.setText("Au tour des rouges");
	}

	public void setPv(int n){
		pv.setText("PV : "+n);
	}
	public void setMouvement(int n){
		mouvement.setText("mouvement : "+n);
	}
	public void setForce(int n){
		force.setText("force : "+n);
	}
	public void setPrecision(int n){
		precision.setText("precision : " + n);
	}
	public void setSoin(int n){
		if(n>0){
			soin.setText("soin : " + n);
		}
		else
			soin.setText("ne soigne pas");
	}
	public void setPortee(int n){
		portee.setText("portee : " + n);
	}
    public void setResistance(int n){
		resistance.setText("resistance : " + n);
	}
    
	public boolean isDeploiement() {return deploiement;}
	public void setDeploiement(boolean deploiement) {this.deploiement = deploiement;}
	public int getHauteur(){return hauteur;}
	public void setHauteur(int t){hauteur = t;}
	public int getLargeur(){return largeur;}
	public void setLargeur(int t){largeur = t;}
	public int getNbCasePiege() {return nbCasePiege;}
	public void setNbCasePiege(int nbCasePiege) {this.nbCasePiege = nbCasePiege;}

	public int getNbMur() {
		return nbMur;
	}

	public void setNbMur(int nbMur) {
		this.nbMur = nbMur;
	}
	
}
